home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / ping_host.nasl < prev    next >
Text File  |  2005-01-14  |  5KB  |  197 lines

  1. #
  2. # This script was written by Renaud Deraison <deraison@cvs.nessus.org>
  3. #
  4. # See the Nessus Scripts License for details
  5. #
  6.  
  7. #defportlist= "22;80;443";
  8. defportlist= "built-in";
  9. # Or try this one:
  10. # defportlist= "113;139;445";
  11.  
  12. # H D Moore & Michel Arboi's Port list :
  13. # if you want more reliable but slower results, use 'extended' as the port list
  14. # 21;22;23;25;53;79;80;110;113;135;139;143;264;389;443;445;993;1454;1723;3389;8080
  15.  
  16.  
  17. if(description)
  18. {
  19.  script_id(10180);
  20.  script_version ("$Revision: 1.43 $");
  21.  name["english"] = "Ping the remote host";
  22.  name["francais"] = "Ping la machine distante";
  23.  script_name(english:name["english"], francais:name["francais"]);
  24.  
  25.  desc["english"] = "
  26. This script will tcp ping the remote host and report to the plugins 
  27. knowledge base whether the remote host is dead or alive.
  28.  
  29. The technique used is the TCP ping, that is, this script sends to the remote
  30. host a packet with the flag SYN, and the host will reply with a RST or a 
  31. SYN/ACK.
  32.  
  33. You can also select the use of the traditional ICMP ping.
  34.  
  35. Risk factor : None";
  36.  
  37.  desc["francais"] = "Ce script ping la
  38. machine distante et rapporte dans
  39. la base de connaissances des plugins
  40. si la machine distante est Θteinte
  41. ou allumΘe.
  42.  
  43. La technique utilisΘe est le ping TCP,
  44. c'est α dire que ce script envoye un
  45. paquet TCP avec le flag ACK,
  46. et la machine distante doit rΘpondre
  47. avec un RST.
  48.  
  49. Vous pouvez aussi selectionner le ping ICMP
  50. traditionel.
  51.  
  52. Facteur de risque : Aucun";
  53.  
  54.  script_description(english:desc["english"], francais:desc["francais"]);
  55.  
  56.  summary["english"] = "icmp/tcp pings the remote host";
  57.  summary["francais"] = "Ping la machine distante via un ping tcp et/ou icmp";
  58.  script_summary(english:summary["english"], francais:summary["francais"]);
  59.  
  60.  script_category(ACT_SCANNER);
  61.  
  62.  
  63.  script_copyright(english:"This script is Copyright (C) 1999 Renaud Deraison",
  64.         francais:"Ce script est Copyright (C) 1999 Renaud Deraison");
  65.  family["english"] = "Port scanners";
  66.  family["francais"] = "Port scanners";
  67.  script_family(english:family["english"], francais:family["francais"]);
  68.  
  69.  script_add_preference(name:"TCP ping destination port(s) :",
  70.                        type:"entry", value:defportlist);
  71.  script_add_preference(name:"Do a TCP ping", 
  72.                       type:"checkbox", value:"yes");
  73.  script_add_preference(name:"Do an ICMP ping", 
  74.                       type:"checkbox", value:"no");              
  75.  script_add_preference(name:"Number of retries (ICMP) :", 
  76.              type:"entry", value:"10");    
  77.             
  78.             
  79.  script_add_preference(name:"Make the dead hosts appear in the report",
  80.              type:"checkbox", value:"no");
  81.             
  82.  script_add_preference(name:"Log live hosts in the report",
  83.               type:"checkbox", value:"no");            
  84.  exit(0);
  85. }
  86.  
  87. #
  88. # The script code starts here
  89. #
  90. include("global_settings.inc");
  91.  
  92. function log_live()
  93. {
  94.  debug_print(get_host_ip(), " is up\n");
  95.  if ("yes" >< log_live)
  96.  {
  97.   security_note(data:"The remote host is up", port:0);
  98.  }
  99.  exit(0);
  100. }
  101.  
  102.  
  103. if(islocalhost())exit(0);
  104.  
  105. do_tcp = script_get_preference("Do a TCP ping");
  106. if(!do_tcp)do_tcp = "yes";
  107.  
  108. test = 0;
  109.  
  110. show_dead = script_get_preference("Make the dead hosts appear in the report");
  111. log_live = script_get_preference("Log live hosts in the report");
  112.  
  113.  
  114. if("yes" >< do_tcp)
  115. {
  116.  test = test + 1;
  117.  p = script_get_preference("TCP ping destination port(s) :");
  118.  if (!p) p = defportlist;
  119.  if (p == "extended")
  120.     p = "22;80;139;443;445;21;23;25;53;79;110;113;135;143;264;389;993;1454;1723;3389;8080";
  121.  
  122.  debug_print("TCP ports=",p,"\n");
  123.  if(p != "built-in")
  124.  {
  125.   dport = ereg_replace(string:p, pattern:"([^;]*);(.*)", replace:"\1");
  126.   while (dport)
  127.   {
  128.    p = p - dport;
  129.    p = p - ";";
  130.    # display(string("Port=",dport,"\n"));
  131.    if(tcp_ping(port:dport)){
  132.     log_live();
  133.      }
  134.    dport = ereg_replace(string:p, pattern:"([^;]*);(.*)", replace:"\1");
  135.   }
  136.  }
  137.  else
  138.  {
  139.   if(tcp_ping())log_live();
  140.  }
  141. }
  142.  
  143. do_icmp = script_get_preference("Do an ICMP ping");
  144. if(!do_icmp)do_icmp = "no"; # disabled by default (too slow)
  145.  
  146. if((do_tcp == "no") && (do_icmp == "no"))exit(0);
  147.  
  148. src = this_host();
  149. dst = get_host_ip();
  150. retry = script_get_preference("Number of retries (ICMP) :");
  151. retry = int(retry);
  152. alive = 0;
  153. if(retry <= 0) retry = 3;
  154.  
  155. if("yes" >< do_icmp)
  156. {
  157.   debug_print("ICMP retry count=", retry, "\n");
  158.   j = 0;
  159.   test = test + 1;
  160.   filter = string("ip and src host ", get_host_ip());
  161.   while(j < retry)
  162.   {
  163.    # MA 2002-02-01: we increment the IP ID. Keeping the same one is not
  164.    # safe.
  165.    id = 1235 +j;
  166.    ip = forge_ip_packet(ip_v:4, ip_hl:5, ip_tos:0, ip_off:0,ip_len:20,
  167.                  ip_p:IPPROTO_ICMP, ip_id:id, ip_ttl:0x40,
  168.                 ip_src:this_host());
  169.    icmp = forge_icmp_packet(ip:ip, icmp_type:8, icmp_code:0,
  170.                   icmp_seq: 1, icmp_id:1);
  171.    # MA: I planned to add a payload to the packet, so that IDS could detect 
  172.    # a Nessus ping. Renaud was afraid that this may break something.
  173.    # I have to admit that even a bad script kiddy could edit the script
  174.    # The trick was to add data:"Nessus is pinging this host",
  175.    # or maybe just: data:"Nessus",
  176.  
  177.    rep = send_packet(pcap_active:TRUE,
  178.                 pcap_filter:filter,
  179.              pcap_timeout:1,
  180.              icmp);
  181.    if(rep){
  182.        log_live();
  183.     }
  184.    j = j+1;
  185.  }
  186. }
  187.  
  188. if(test)
  189. {
  190. debug_print(get_host_ip(), " is dead\n");
  191. if("yes" >< show_dead)
  192. {
  193.   security_note(data:"The remote host is considered as dead - not scanning", port:0);
  194. }
  195. set_kb_item(name:"Host/ping_failed", value:TRUE);
  196. }
  197.